// #include <assert.h>
// #include <stdio.h>
// #include <stdlib.h>
// #include "windows.h"
//
// typedef struct LinkNode {
//     int data;
//     struct LinkNode* next;
// } LinkNode;
//
// typedef struct LinkList {
//     LinkNode* head;
// } LinkList;
//
// LinkList* LinkInit() {
//     LinkList* list = (LinkList*)malloc(sizeof(LinkList));
//     if (list == NULL) {
//         exit(1);
//     }
//     list->head = (LinkNode*)malloc(sizeof(LinkNode));
//     list->head->next = NULL;
//     return list;
// }
//
// void LinkInsert(LinkList* list, int data) {
//     LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
//     if (newNode == NULL) {
//         perror("malloc");
//         exit(1);
//     }
//     newNode->data = data;
//     newNode->next = NULL;
//     LinkNode* current = list->head;
//     while (current->next != NULL) {
//         current = current->next;
//     }
//     current->next = newNode;
// }
//
// void printLinkList(LinkList* list) {
//     LinkNode* current = list->head->next;
//     while (current != NULL) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// void FreeLinkList(LinkList* list) {
//     if (list == NULL) {
//         return;
//     }
//     LinkNode* current = list->head;
//     while (current != NULL) {
//         LinkNode* next = current->next;
//         free(current);
//         current = next;
//     }
//     free(list);
// }
//
// LinkNode* NewNode(int elem) {
//     LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
//     if (newNode == NULL) {
//         exit(1);
//     }
//     newNode->data = elem;
//     newNode->next = NULL;
//     return newNode;
// }
//
// LinkList* JiaoJi(LinkList* A, LinkList* B) {
//     assert(A && B);
//
//     LinkList* result = LinkInit();
//     LinkNode* tail = result->head;
//
//     LinkNode* a = A->head->next;
//     LinkNode* b = B->head->next;
//
//     while (a != NULL && b != NULL) {
//         if (a->data == b->data) {
//             LinkNode* newNode = NewNode(a->data);
//             tail->next = newNode;
//             tail = tail->next;
//             a = a->next;
//             b = b->next;
//         } else if (a->data < b->data) {
//             a = a->next;
//         } else {
//             b = b->next;
//         }
//     }
//
//     return result;
// }
//
// int main() {
//     LinkList* A = LinkInit();
//     LinkList* B = LinkInit();
//
//     LinkInsert(A, 1);
//     LinkInsert(A, 3);
//     LinkInsert(A, 4);
//     LinkInsert(A, 6);
//     LinkInsert(A, 9);
//
//     LinkInsert(B, 2);
//     LinkInsert(B, 3);
//     LinkInsert(B, 6);
//     LinkInsert(B, 7);
//     LinkInsert(B, 9);
//
//     LinkList* C = JiaoJi(A, B);
//
//     printf("A LinkList: ");
//     printLinkList(A);
//
//     printf("B LinkList: ");
//     printLinkList(B);
//
//     printf("Intersection: ");
//     printLinkList(C);
//
//     FreeLinkList(A);
//     FreeLinkList(B);
//     FreeLinkList(C);
//
//     return 0;
// }